/* c01/ejemplo-07/primitivas.c
**/
#include "primitivas.h"

void dibujar_rectangulo(SDL_Surface *s, SDL_Rect rectangulo, Uint32 color){
	int i;
	for(i=rectangulo.x; i<rectangulo.x+rectangulo.w; i++){
		ponerPixel(s, i, rectangulo.y, color);
		ponerPixel(s, i, rectangulo.y+rectangulo.h-1, color);
	}
	for(i=rectangulo.y; i<rectangulo.y+rectangulo.h; i++){
		ponerPixel(s, rectangulo.x, i, color);
		ponerPixel(s, rectangulo.x+rectangulo.w-1, i, color);
	}
}
void ponerPixel(SDL_Surface *surface, int x, int y, Uint32 color){
	int bpp = surface->format->BytesPerPixel;
	// Aquí p es la dirección del pixel al que queremos ponerle color
	Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
	
	if((x > surface->w) || (y > surface->h) || (x < 0) || (y < 0)) return;
	switch(bpp) {
	case 1:
		*p = color;
		break;

	case 2:
		*(Uint16 *)p = color;
		break;

	case 3:
		if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
			p[0] = (color >> 16) & 0xff;
			p[1] = (color >> 0) & 0xff;
			p[2] = color & 0xff;		
		} else {
			p[0] = color & 0xff;
			p[1] = (color >> 8) & 0xff;
			p[2] = (color >> 16) & 0xff;	
		}
		break;

	case 4:
		*(Uint32 *)p = color;
		break;
	}
}
